﻿using System;
using System.Collections.Generic;
using System.Text;

namespace Base
{
    class OOPDemo1
    {
        //static void Main(string[] args)
        //{
        //    //只读字段
        //    //静态只读字段
        //    //OOPDemo1.Age = 10;

        //    OOPDemo1 o = new OOPDemo1();
        //    //实例只读字段
        //    //o.Name = "1234";

        //    ////params 可变参数
        //    //Console.WriteLine(Params.Sum(1,2,3));
        //    //Params.Split();

        //    //扩展方法 double类型 扩展 round方法
        //    double pi = 3.1415925;
        //    Console.WriteLine(pi.Round(3));
            
            
            

        //}

        public readonly string Name;

        public readonly static int Age = 19;

        public OOPDemo1()
        {
            Name = "jack";
        }
    }

    //字段-》属性
    class Student
    {
        //属性正常写法
        public int Age1
        {
            get { return this.Age1; }
            set
            {
                if (Age1 > 0 && Age1 < 120)
                {
                    this.Age1 = value;
                }
                else
                {
                    throw new Exception("Age value has error");
                }
            }
        }

        //属性的快速写法 完整声明 propfull TAB两次  通常字段私有，封装公有属性类暴露字段

        private int age2;

        public int Age2
        {
            get { return age2; }
            set { age2 = value; }
        }


        //属性的快速声明 prop TAB两次
        public int Age3 { get; set; }
    }

    //可变参数 有且只有一个，并在参数列表末尾
    class Params
    {
        public static int Sum(params int[] arrays)
        {
            int sum = 0;
            foreach(var n in arrays)
            {
                sum += n;
            }
            return sum;
        }
        
        public static void Split()
        {
            string strName = ("Tim;Tom,Lisa");
            string[] str = strName.Split(';', ',', ',', ',');
            foreach (var s in str)
            {
                Console.WriteLine(s);
            }
        }
    }

    //扩展方法
    static class DoubleExtension
    {
        //类和方法都必须static，要使用this关键字修饰,将自己作为第一个参数传递。
        public static double  Round(this double input,int digits){
            double result = Math.Round(input, digits);
            return result;
        }
    }
    

}
